'use strict';

/**
 * 获取微信上下文信息，包含用户的OPENID
 */
exports.main = async (event, context) => {
	// 获取微信上下文信息
	const wxContext = context.WXCONTEXT || {};
	
	console.log('原始上下文信息:', {
		OPENID: wxContext.OPENID,
		PLATFORM: wxContext.PLATFORM,
		APPID: wxContext.APPID,
		OS: wxContext.OS,
		IP: wxContext.CLIENT_IP
	});
	
	// 获取客户端传递的用户信息作为备用方案
	const clientUserInfo = event.userInfo || {};
	const clientOpenId = clientUserInfo.openId || clientUserInfo.openid || '';
	const clientUserId = clientUserInfo.userId || clientUserInfo.user_id || '';
	
	// 读取数据库中的用户信息
	try {
		// 如果传递了可用的userId，尝试从数据库获取完整信息
		if (clientUserId && clientUserId !== 'anonymous') {
			console.log('客户端提供了userId:', clientUserId, '尝试从数据库获取完整用户信息');
			
			const db = uniCloud.database();
			const userRes = await db.collection('users').doc(clientUserId).get();
			
			if (userRes && userRes.data && userRes.data.length > 0) {
				const dbUserInfo = userRes.data[0];
				
				// 如果数据库中有openid信息，并且当前上下文中没有，使用数据库的值
				if (dbUserInfo._openid && !wxContext.OPENID) {
					console.log('从数据库获取到用户OPENID:', dbUserInfo._openid);
					wxContext.OPENID = dbUserInfo._openid;
				}
			}
		}
	} catch (e) {
		console.error('从数据库获取用户信息失败:', e);
	}
	
	// 检查OPENID是否为有效值，确保我们不返回'anonymous'作为OPENID
	let finalOpenId = '';
	if (wxContext.OPENID && wxContext.OPENID !== 'anonymous') {
		finalOpenId = wxContext.OPENID;
	} else if (clientOpenId && clientOpenId !== 'anonymous') {
		finalOpenId = clientOpenId;
	} else {
		// 如果没有有效的OPENID，检查是否有有效的userId
		finalOpenId = '';  // 明确不设置，而不是设置为'anonymous'
	}
	
	// 检查USER_ID是否为有效值
	let finalUserId = '';
	if (clientUserId && clientUserId !== 'anonymous') {
		finalUserId = clientUserId;
	} else if (wxContext.USERID && wxContext.USERID !== 'anonymous') {
		finalUserId = wxContext.USERID;
	} else {
		finalUserId = '';  // 明确不设置，而不是设置为'anonymous'
	}
	
	// 确定身份来源
	let authSource = 'unknown';
	if (finalOpenId) {
		authSource = 'wechat';
	} else if (finalUserId) {
		authSource = 'custom';
	} else {
		authSource = 'anonymous';
	}
	
	// 构建结果
	const result = {
		OPENID: finalOpenId,  // 显式设置为空字符串而非'anonymous'
		APPID: wxContext.APPID || '',
		PLATFORM: wxContext.PLATFORM || 'unknown',
		OS: wxContext.OS || '',
		CLIENT_IP: wxContext.CLIENT_IP || '',
		
		// 额外字段，便于客户端处理不同情况
		USER_ID: finalUserId,
		auth_source: authSource,
		has_valid_id: !!(finalOpenId || finalUserId)
	};
	
	console.log('获取用户上下文完成，返回信息:', {
		...result,
		OPENID: result.OPENID ? '有值' : '无值',
		USER_ID: result.USER_ID ? '有值' : '无值'
	});
	
	return result;
}; 